#pragma once
#include <mutex>
#include <unistd.h>
#include <sys/syscall.h>
#include <thread>
#include <condition_variable>
#include <functional>
#include <future>
#include <atomic>
#include <queue>


class ThreadPool
{
private:
    std::vector<std::thread> threads_;      //线程池中的线程
    std::queue<std::function<void()>> taskqueue_; //任务队列
    std::mutex mutex_;                      //任务队列同步互斥锁
    std::condition_variable condition_;      //任务队列同步的条件变量
    std::atomic_bool stop_;                 //在析构函数中，把stop_置为true，全部线程退出
    std::string threadType_;                //线程种类:"IO"、"WORKS"
public:
    //在构造函数中将启动threadnum个线程，
    ThreadPool(size_t threadNum,const std::string& threadType);

    //把任务添加到队列中
    void addtask(std::function<void()> task);

    //获取线程池的大小
    size_t size();

    //停止线程
    void stop();
    
    //在析构函数中将停止线程.
    ~ThreadPool();
};